我們再次登入 cloudfalre 左側那排,workers 下面有個 secrets store,我們先新增一個變數
然後我們再新增到 wrangler.jsonc
"secrets_store_secrets": [
{
"binding": "turnstile_key",
"store_id": "f9a2d4739e3f4c4a8df3310ce83bf8aa",
"secret_name": "turnstile_key"
}
]
基本上 binding、secret_name 就用你名稱就好
store_id 每個帳號都有自己的一組,通常點進去那個頁面就可以找到識別碼了
然後呢在程式碼中取用你只需要
import type { RequestHandler } from './$types';
import { hashPassword } from '$lib/server/auth';
import type { ClientUsers } from '$lib/server/schema/ClientUsers';
export const POST: RequestHandler = async ({ request, cookies, platform }) => {
const { username, password, token } = await request.json();
const stmt = await platform.env.DB.prepare('SELECT * FROM client_users WHERE username = ?');
const { results } = await stmt.bind(username).run();
console.log(token);
console.log(results);
if (!Array.isArray(results) || results.length === 0) {
return new Response(JSON.stringify({ message: 'User not found' }), { status: 401 });
}
try {
// 這行取得
const APIkey = await platform.env.turnstile_key.get();
const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ secret: APIkey, response: token })
});
console.log(await res.json());
} catch (error) {
console.error('Turnstile validation error:', error);
return { success: false, 'error-codes': ['internal-error'] };
}
}
不過要注意的是,這跟前面 D1 一樣,你本地測試要用,需要自己用命令列建立喔,他不會自己拉遠端的
今天情緒抒發:
今天壓力變很小了,明天的寫好了,終於要結束了